BigQuery Data Transfer Serviceを使ってS3からBigQueryへのデータを転送してみる

BigQuery Data Transfer Serviceを使ってS3からBigQueryへのデータを転送してみる

Clock Icon2022.01.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

BigQuery Data Transfer Service は、あらかじめ設定されたスケジュールに基づき、BigQueryへのデータの移動を自動化するマネージドサービスです.

一つ前の記事でGlueを使ってデータを加工してS3に保存していましたが、

今回はそのデータをBigQueryに転送してデータを参照できる状態にしてみます。

やってみる

GCPのプロジェクトを用意し、BigQuery Data Transfer Service の有効化を行っていることを前提とします。

データセットの作成もあらかじめ行っておきましょう。

テーブルの作成

データセットのメニューから、テーブルの作成をクリックします。

Data Transfer Serviceを使ってデータ転送を行うため、ソースは空のテーブル とします。

送信先では、プロジェクト、データセットを指定したあと、 テーブル名の入力を行いましょう。

S3に保存されているデータの例)

S3に保存されているデータに合わせてスキーマを作成します。

パーティショニングも可能ですが、今回は端折ります。

入力が終わったら、テーブルを作成 をクリックして終了です。

転送の作成

Data Transfer Serviceで転送の作成 をクリックして作成していきます。

ソースタイプはS3を選択しましょう。

構成名とスケジュールを入力していきます。

スケジュールは、 毎日/毎週/毎月/カスタム/オンデマンド から選択できるので、用途に合わせて指定しましょう。

一旦テスト目的のため、今回はオンデマンドにしてみます。

転送先の設定のデータセットを選択後、データソースの詳細を入力していきます。

  • Destination tableは事前に作成した読み込み先のテーブル名を入力します。
  • S3から読み込むファイルのURLを入力します(s3:// から始まるURL)
  • S3にアクセスする必要があるので、S3転送専用の固有のアクセスキーID とシークレットアクセスキーを作成し、その2つを入力します。
  • File formatはS3に保存しているデータタイプと同じものを指定します。

Transfer Options以下の設定は必要に応じて行います。

今回は不要なのでデフォルトの状態のままにし、転送を作成します。

転送の実行

転送の作成が完了すると、転送の詳細画面に遷移するので、その画面上にある今すぐ転送を実行をクリックしてみます。

Run one time transferを選択してOKボタンをクリックします。

転送がスケジュールされるので、完了まで待っておきます。

転送が成功すると、緑のチェックマークがつきます。

転送が失敗した場合、以下のような原因が考えられるので、失敗した時は確認します。

  • 宛先テーブルが存在しない
  • テーブル スキーマが定義されていない
  • テーブル スキーマと転送されるデータとの互換性がない

実行の詳細に転送のログも表示されるので、これも参考になります。

データの確認

転送が終了したら、テーブルに対してクエリを実行して中身を確認してみます。

上記のように、自身が意図している結果が表示されればOKです。

複数ファイルを転送して読み込むには?

先ほどの転送作成時にはS3 URLに単体ファイルのURLを指定しましたが、複数のファイルに分かれているデータになっている場合も多いかと思います。

そういったデータを転送するには、S3 URLに共通のプレフィックスの後に続けてワイルドカードを指定することで転送できます。

s3://my-bucket/my-folder/*

最後に

S3に保存されたデータをBigQueryへ転送する方法として、Data Transfer Serviceを使ってみました。

さまざまな場所に散らばっているデータを容易に転送できるのでとても便利なサービスだと思います。

AWSやAzureを利用しているがBigQueryを使いたいといったマルチクラウドのユースケースで重宝しそうです(まさに今)。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.